package example.factorybean;

import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;

/**
 * MyFactoryBean实际上一个bean，但是这个bean有一个getObject方法，该类所对应的bean
 * 也就是说如果在bean容器中直接通过beanId为myFactoryBean去拿bean，那么拿到的通过getObject方法获取的bean，也就是ReturnedBean
 * 如果想要获取当前类本身的bean就需要在beanid前面加上一个&符号，也就是通过  “&myFactoryBean”可以拿到MyFactoryBean这个bean
 * <p>
 * 这么做的目的是为了拿到一个复杂的bean，因为在getObject中我们可以先处理自己的逻辑，饭后再返回bean，典型的应用就是SqlSessionFactoryBean,
 * 这是mybatis为了整合spring而提供的一个bean，这个bean的目的就是为了可以简单的向外提供SqlSessionFactory,
 * 因为SqlSessionFactory自身的初始化也是需要依赖很多其他的内容，如果是我们自己去通过spring来获取这个bean，那么那些依赖的内容就需要我们自己处理，现在是mybatis
 * 自己处理那些依赖，只需要通过getObject方法返回最终的SqlSessionFactory即可
 */
@Component("myFactoryBean")
public class MyFactoryBean implements FactoryBean {
	@Override
	public Object getObject() throws Exception {
		return new ReturnedBean();
	}

	@Override
	public Class<?> getObjectType() {
		return null;
	}

	public void test() {
		System.out.println("这是myFactoryBean本身");
	}
}
